home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Whiteline: delta
/
whiteline CD Series - delta.iso
/
tools
/
utils
/
smc_tt1
/
lance.txt
< prev
next >
Wrap
Text File
|
1995-11-25
|
20KB
|
429 lines
Ethernet für TT
Die hier vorgestellte Lösung einer LAN Karte für den TT basiert auf der PC ISA Karte SMC ELITE
ULTRA von SMC (siehe Abbildung). Diese Karte zeichnet sich durch hervorragende Performance
und ein gut geeignetes Bus Interface aus. Diese Karte ist zwar teurer (ca 160,-) als eine NE2000
kompatible Karte, was aber durch die obigen Vorteile eindeutig wett gemacht wird.
Das Interface kann auch für andere Karten verwendet werden, wobei aber zu Beachten ist, daß nur
wenige der möglichen ISA Buszyklen unterstützt werden.
Bei der Entwicklung der Schaltung stand der geringe Aufwand im Vordergrund. Um das zu
erreichen waren einige Kompromisse notwendig, die aber der Performance nicht im geringsten
abträglich sind!
Zugriffe
Wie in der Schaltung zu sehen ist, wurden die Daten und Adressleitungen der beiden Bussysteme
einfach miteinander verbunden.
Im Schaltplan sind die Pull Up Widerstände von 1.2kOhm von alle Adressen und
Datenleitungen, sowie der MEM und IO Leitungen nicht eingezeichnet. Diese müssen ganz
dicht an den ISA Pins angeschlossen werden.
Zwei GAL's sorgen für eine Anpassung des Timings von Zugriffen des VME Busses auf den ISA
Bus. Dabei werden drei Arten von Zugriffen unterschieden:
1. 16 Bit Memoryzugriff. Hier erfolgt ein wortweiser Zugriff vom VME Bus auf high und low Byte
gleichzeitig. Auch die LAN Karte beherrscht diesen Zugriff. Dabei muß die Leitung /SBHE
aktiviert werden, während der Lese/Schreibzugriff erfolgt. Der Zugriff erfolg auf den Adressen
$FE000000 bis $FE100000. Wichtig: Da der PC ein little Endian Maschine ist, müssen die
Datenleitungen des low und high Byte vertauscht werden!!.
2. 8 Bit IO Zugriff gerade Adressen. Dieser Zugriff greift auf die geraden Adressen der ISA Karte
zu. Diese Adressen werden beim ISA Bus über D0-D7 übertragen. /SBHE wird hier nicht
aktiviert, da der Transfer nur über den PC Slot läuft. A0 ist hier 0
3. 8 Bit IO Zugriff ungerade Adressen. Hier soll auf die ungeraden Adressen der ISA Karte
zugegriffen werden. Diese werden bei dieser aber auch über D0-D7 transferiert. Der 68000
erwartet diese aber auf seinen D0-D7 die mit D8-D15 des ISA Bus verbunden sind. Um hier
keinen Bustreiber verwenden zu müssen, wurde dieser Zugriff ebenfalls auf eine gerade
68000er Adresse gelegt. Nur die Leitung A0 erhält hier einen anderen Wert. Dieser wird aus
A20 des VME Bus abgeleitet. Somit zerfällt der IO Adressbereich in zwei getrennte Bereiche
für gerade und ungerade Bytes.
Timing
Das VME Timing ist grundsätzlich asynchron, und läßt sich somit recht einfach an das andere
Timing anpassen. Dabei wird der VME Buszyklus solange verlängert, bis die Karte die Daten
bereitsgestellt bzw abgeholt hat. Dieser Vorgang wird über die Verzögerung von /DTACK mit Hilfe
des Schieberegisters IC1 (74164) durchgeführt. Das Schieberegister wird mit jedem Zyklus (/DS
und /AS werden aktiviert) über /T_ST freigegeben, und schiebt dann eine 1 hindurch. Diese
erscheint dann jeweils nach einem Clock Impuls einen Ausgang weiter. Nach 4 Impulsen erreicht
sie schließlich den Ausgang Q3. dadurch wird DTACK aktiviert, falls die PC Karte nicht mit /RDY
noch etwas Zeit fordert. Der gesamte Vorgang dauert ca. 280ns, wodurch eine Transferrate von ca
6 MB/s erreicht werden kann. Hier zeigt sich, daß die SMC Karte anderen Karten weit überlegen ist.
Bei einem Blick in die GAL Gleichungen ist festzustellen, daß die MEM und IO Leitungen des ISA
Bus erst bei T1 aktiviert werden. Das ist notwendig, damit die Adressen lange genug vor dem
Kartenzugriff stabil sind. Hier ist das PC Timing sehr kritisch und vor allem überhaupt nicht logisch!
ursprünglich hatte ich noch ein BALE Signal aus T1 erzeugt, es hat sich aber gezeigt, daß das
überhaupt nicht notwendig ist.
Interrupts
Eine LAN Karte ohne Interrupt ist praktisch wertlos, daher wurde eine eigene Interruptlogik
installiert, die einen Vektorinterrupt auf dem VME Bus auslöst. Das ist notwendig, weil der VME Bus
keinen Autointerrupt unterstützt. Der Vektorgenerator ist hier IC2 (74LS245) dessen Eingänge fest
auf den Vektor $AA verdrahtet sind. Hier kann auch ein beliebiger anderer freier Vektor gewählt
werden. Auf meinem Prototypen ist hier ein Schalterarray angeordnet.
Die Logik, die zu Erkennung und Bestätigung eines Interruptes notwendig ist befindet sich im Gal
VME_PC17. Dieses GAL benötigt die Adressen A1-A3, da die CPU hierüber bekanntgibt welcher
Interruptlevel bestätigt werden soll. Das Interface verwendet Interruptlevel 4.
Aus Faulheit wurde die Interruptkette (IACKIN/IACKOUT) nicht implementiert. Daher darf keine
andere VME Buskarte den Interrupt 4 verwenden.
Die Interruptquelle ist der Interrupt 3 (IRQ3) der ISA Karte. Diese Leitung ist high aktiv, und benötigt
daher einen pull-down Widerstand!
GAL VME_PC16
*IDENTIFICATION
VME_PC;
*TYPE
GAL20V8;
*PINS
/AS = 23,
/WR = 2,
/DS0 = 3,
/DS1 = 4,
A21 = 5,
A22 = 6,
A23 = 7, T1 = 8,
T2 = 9,
/WAIT = 10,
A20 = 11,
/DTACK.T = 15,
T_START.T = 18,
/SBHE.T = 17,
A0.T = 16,
/MWR.T = 22,
/MRD.T = 21,
/IOW.T = 20,
/IOR.T = 19;
*BOOLEAN-EQUATIONS
DTACK = /A22 & /A23 & (DS1 + DS0) & AS & T2 & /WAIT;
T_START = /A22 & /A23 & AS & (DS0 + DS1);
IOW = A21 & /A22 & /A23 & AS & DS1 & WR & T1;
IOR = A21 & /A22 & /A23 & AS & DS1 & /WR & T1;
MWR = /A21 & /A22 & /A23 & AS & (DS0 + DS1) & WR & T1;
MRD = /A21 & /A22 & /A23 & AS & (DS0 + DS1) & /WR & T1;
SBHE = /A21 & /A22 & /A23 & AS & (DS0 & DS1 + DS0 & /DS1);
A0 = /A21 & /A22 & /A23 & AS & /DS1 & DS0 + A21 & /A22 & /A23 & AS & A20;
*END
GAL VME_PC17
*IDENTIFICATION
VME_PC1;
*TYPE
GAL16V8;
*PINS
/RESET = 1,
/DS0 = 7,
/IACK = 8,
A1 = 4,
A2 = 5,
A3 = 6,
IRQ3_PC = 9,
/DTACK.T = 12,
/VEKTOR.T = 14,
/IRQ4.T = 13,
RESET_PC.T = 19;
*BOOLEAN-EQUATIONS
DTACK = /A1 & /A2 & A3 & DS0 & IACK;
VEKTOR = /A1 & /A2 & A3 & DS0 & IACK;
IRQ4 = IRQ3_PC;
RESET_PC = RESET;
*END
Stückliste
IC1 74LS164
IC2 74LS245
VME_PC16 GAL 20V8
VME_PC17 GAL 16V8
R1 1k
R2 1k
D1-D3 1N4181
RN1-5 Widerstandsarrays 8*1.2k (nicht eingezeichnet, siehe Text)
Cx 100nF Blockkondensatoren an jedem IC und am PC Slot (möglichst mehrfach!)
AUFBAU
Der Aufbau der Schaltung ist vor allem eine mechanische Herausforderung. Beim Aufbau ist darauf
zu Achten, daß alle Adress und Datenleitungen mit den angegebenen Pull-up Widerständen
versehen werden. Wird das nicht gemacht, kommt es zu Lese und Schreibfehlern beim Zugriff auf
die Karte, die sehr unschöne Systemabstürze zur Folge haben können.
Ich habe die Schaltung auf einer Europa-Experimentierplatine aufgebaut. Der PC Slot ist mit ca
20cm fliegenden Leitungen angeschlossen. Da mein TT im Tower wohnt kann ich keine Aussagen
zum Originalgehäuse treffen.
Falls der VME Slot schon mit einer Grafikkarte belegt ist, muß man sich etwas einfallen lassen, um
einen weiteren VME Slot zu erhalten. Dazu muß der neue Slot einfach mit dem bestehenden
parallel geschaltet werden. Das Interface benötigt eigentlich nur eine 64-polige Verbindung (a und
c Reihe), da die mittlere Pinreihe des VME-Bus (fast) nicht benötigt wird. Die IRQ-4 Leitung ist die
einzige, die auf der mittleren Pinreihe liegt!
Falls es zu Adresskonflikten mit einer anderen VME Karte kommen sollte muß das GAL VME_PC16
umprogrammiert werden (Auswertung von A22 und A23).
Konfigurieren der Karte
Die Karte beitzt zum Glück nur einen einzigen Jumper, der in die Stellung "280 3 D000 NONE"
gebracht wird. Für die Tests mit der Software sollte mindestens ein T Stück mit 2
Abschlußwiderständen auf den BNC Connector gesteckt werden. Die Karte besitzt eine LED, die
die Netzaktivität anzeigt.
Test der Hardware
Bein Einschalten, sowie bei einem Reset (CTRL-ALT-DEL genügt) muß die Akivitäts LED auf der
Karte aufleuchten und nach einigen Sekunden wieder erlöschen. Damit ist der Reset schon in
Ordnung.
Bevor der Treiber installiert wird kann die Hardware grob geprüft werden. Dazu wird ein Debugger
bzw Monitor benötigt (z.B. PD, der Pure C Debugger). Mit diesem Monitor wird die Adresse
$FE200280 beobachtet. Hier sollte jedes 2. Byte != $FF sein. Ab $FE2002A0 sollten wieder alle
Bytes $FF sein, wie auch vor der obigen Adresse. Dieses Verhalten muß auch an Adresse
$FE300280 feststellbar sein, wobei hier aber andere Werte stehen müssen. Durch wechselseitiges
zusammensetzen der Bytes muß die auf der Karte aufgedruckte Ethernetadresse erkennbar
werden. War das erfolgreich, kann der Treiber installiert werden.
Software
Die Software besteht aus einem Treiber für das ANS (Atari Network System). Dieser Treiber stellt
einfache Funktionen zum lesen und schreiben von Datenpaketen zur Verfügung. Die Einbindung
erfolgt über ein Cookie.
Der Treiber wurde bei mir mit dem TUW TCP/IP Stack sowie Telnet und FTP getestet. Als
Gegenstelle dient mir ein LINUX PC. Auf dem TT wird bei mir MAG!C eingesetzt, Plain TOS sollte
genauso gehen. Mit MinT wird's wahrscheinlich nicht funktionieren (hab's aber nicht getestet).
Damit jeder sehen kann, wie die Karte angesteuert wird, sind dem Paket die Sourcen des Treibers
beigelegt. Mit PURE-C sollte das Übersetzen kein Problem sein. In dem File WD_TOOLS.C kann
die Initialisierung und der Test der Karte eingesehen werden, falls der Vorgang zu Testzwecken
manuell durchgeführt werden muß.
Hinweise
Alle Angaben dieses Paketes sind ohne Gewähr. Für durch den Betrieb oder Aufbau der Scahltung
oder der Software entstehende Schäden kann ich keine Haftung übernehmen. Der Betrieb ist auf
eigene Gefahr und Risiko.
Die Weitergabe und Verwendung dieses Dokumentes und der zugehörigen Software ist frei.
Falls jemand die Schaltung erfolgreich aufgebaut hat oder falls noch Fragen bestehen, stehe ich
gerne für weitere Fragen zur Verfügung. Ich setzte jedoch voraus, daß der Erbauer dieses
Interfaces etwas Erfahrung im Umgang mit dem Oszilloskop hat, denn ansonsten ist eine
Ferndiagnose vollkommen sinnlos. Falls jemand Fehler findet, bitte ich ebenfalls um Nachricht,
damit ich diese in dem Paket korrigieren kann.
Es wird von mir jedoch keine Platine oder fertig gebrannte GAL's geben, da ich nicht in der
Lage bin, diese zu vertreiben. Falls jemand eine Platine dafür erstellt hat, bitte ich um Nachricht,
denn ich hätte gerne auch eine :-) )
Pinbelegungen
Das Platinenprogramm nummeriert die Pins eines Steckers fortlaufend durch. Somit ergebn sich
folgende Zuordungen:
VME Bus: Pin a1-a32 1-32
Pin b1-b32 33-64
Pin c1-c32 65-96
PC Bus: Pin A1-A31 32-62
Pin B1-B31 1-31
Pin C1-C18 19-36
Pin D1-D18 1-18
Adressen
Sackpost: Ulrich Röhr
Gustav Adolf Str. 13
63452 Hanau
Maus: Ulrich Roehr @ F
Internet: ulrich_roehr@f.maus.de
ANHANG PC Bus Signalbeschreibung
AEN A11 0 This output signal when inactive (low) indicates that the CPU or controller board bus master
has control of the bus. When active, the DMA controller has control of the bus. It is often used
to disable devices which must not respond during a DMA cycle.
BALE B28 0 This output signal (when high) indicates that a valid address is present on the LA<23..I7>
address lines. The LA<23. .I7> address lines or any decodes developed from them should be
latched at the falling edge of BALE. This line is high when a 0MA or bus master operation is
occurring.
BCLK B20 0 This output signal is provided to allow synchronization to the main processor clock. Its
freguency will be either 8 MHz or 8 MHz with a duty cycle of 50%.
BUSR0Y A10 I This input signal is used to lengthen a bus cycle from its standard time if a controller board
cannot respond guickly enough. It should be pulled low by an open collector type device as
soon as a slow addressed device is selected and held low until the device has responded.
Bus cycles are lengthened by an integral number of (BCLK) cycles. This line should not be
held low for more than 2.5 us. This line should be driven by an oPen-collector device capable
of sinking 20 mA. ..
DAK0- D08 0
DAK1- B17 0
DAK2- B26 0
DAK3- B15 0
DAK5- B10 0
DAK6- D12 0
DAK7- D14 0 These output lines (DMA Acknowledge) indicate that a reguest for a 0MA service from the
DMA subsystem has been recognized. The acknowledge is indicated by a L0W on this line.
Use this line with the l0RC- or I0WC- line to decode the desired 0MA device. If used to signal
acceptance of a bus-master reguest, this signal indicates when it is legal to pull GRAB- low.
DRQ0 D09 l
DRQ1 B18 l
DRQ2 B06 I
DRQ3 B16 I
0RQ5 D11 I
0RQ6 D13 I
DR07 D15 l These input lines are used to request a DMA service from the DMA subsystem or to gain
control of the system bus from the main CPU (DMA request). The request is made when the
Iine goes from a low to a high and must remain high until the appropriate DAK<7. .5>, <3.
.0> line goes active.
GRAB- D17 l This input signal is used to indicate that a controlIer board bus master is controlling the bus. A
controlIer board can puIl this line Iow when the appropriate DAK line is made active, signalIing
that a master request is granted. The system address, data and controI lines wiII be floated,
allowing the controller board to begin controlling them one full DCLK period after GRAB is
made active. At Ieast one more fulI BCLK period should be allowed after putting a vaIid
address on the bus before activating any of the controI lines. This line should be driven by an
open-collector device capabIe of sinking 20 mA.
GROUND B01 -
B10 -
B31 -
D18 - These lines are connected to the system ac and dc ground. The maximum current allowed on
any singIe contact is I.5 A.
IOCHK- A01 I This input signal is used to signaI the CPU about Parity or other serious errors on controller
boards. This signal should be driven low by an open colIector type output capabIe of sinking
20 mA when an uncorrectabIe system error occurs.
lORC- B14 l/0 This output Iine (l/O read) indicates (when low) when an I/0 device is to send data to the data
bus. lt can be driven bv a controller board acting as a bus master.
I0WC- B13 I/0 This output Iine (I/0 write) indicates (when low) when an I/0 device is to accept the data from
the data bus. It can be driven bv a controlIer board acting as a bus master.
l016- D02 I This input line (I/0 is l6 bits) signaIs the system that the addressed I/0 device is capable of
transferring l6 bits of data at once. When this line is made active, during an l/0 read or write,
the standard one wait state I/0 cycle wiIl be run. This line should be driven low by an
open-colIector device canabIe of sinking 20 mA.
IRQ3 B25 I
lRQ4 B24 l
IRQ5 B23 l
IRQ6 B22 I
IRQ7 B21 I
IRQ9 B04 I
IRQ10 D03 I
IRQ11 D04 I
lRQ12 D05 l
lR014 D07 l
IRQ15 D06 l These input lines are used to interrupt the CPU to request some service. The interrupt is
recognized when the line goes from a low to a high and remains there until the appropriate
interrupt service routine is executed.
LA17 C08 I/O
LA18 C07 I/O
LA19 C06 l/O
LA2D CD5 I/O
LA21 CD4 I/O
LA22 C03 I/O
LA23 C02 I/O These output signals (LatchabIe Address) are used to decode memory which must respond
with zero or one wait state. They are only guaranteed to be valid when BALE is high. These
can be driven by a controller board acting as a bus master.
MRDC- C09 I/O This output line (Memory Read) indicates (when Iow) when a memory device is to send data
to the data bus. This signaI is active over the entire address space of the system. It can be
driven by a controIler board acting as a bus master.
MWTC- C10 I/O This output line (Memory Write) indicates (when low) when a memory device is to accept the
data from the data bus. This signal is active over the entire address space of the system. It can
be driven bv a controIler board acting as a bus master.
MI6- D01 I This input Iine (memory is l6 bits) signais the system that the addressed memory is capabIe of
transferring I6 bits of data at once. When this line is made active, during a memory read or
write, the standard one wait state memory cycle wilI be run. This line shouId be derived from
the LA<23. .I7> address Iines. This line shouId be driven low by an open collector device
capabIe cf sinking 20 mA.
N0WS- B08 I This input Iine (No Wait State) is used to inform the system that standard wait states can be
deleted for cycIes when this line is made active. The line must be pulled low 45 ns before the
falling edge of BCLK in order to be recognized. This Iine shouId be driven by an cpen
collector device capabIe of sinking 20 mA.
O5C B30 O This output signai is a cIock for use in video color burst and other general timing applications.
Its frequencv is I4.3I8I8 MHz and duty cycle is approximateIy 50%.
REFRESH- B19 I/O This output signal is used to indicate (when Iow) a refresh cycle in progress. It shouid be used
to enabIe the SA<7. .0> address lines to the row address inputs of aIl banks of dynamic
memory so that when the MRDC- goes active, the entire system memory is refreshed at one
time. It can be driven by a controIier board acting as a bus master.
RESDRV B02 O This output signal is used to reset the hardware during powerup or power failure.
SA0 A3I I/O
SA1 A3D I/O
SA2 A29 I/O
SA3 A28 I/O
5A4 A27 I/O
5A5 A26 I/O
SA6 A25 I/O
SA7 A24 I/O
SA8 A23 I/O
SA9 A22 I/O
SAI0 A21 I/O
SAlI A20 I/O
SAl2 A19 I/O
SAl3 A18 I/O
SAl4 A17 I/O
SAl5 A16 I/O
SAI6 A15 I/O
SAI7 A14 I/O
SAl8 A13 I/O
SA19 A12 I/O These bidirectionaI signals address memory or I/0 devices within the system. They form the
Iow order 20 bits of the 24 bit address bits that the system offers. These lines are enabled onto
the bus while BALE is high and are latched when BALE goes from a high to a low state. These
can be driven by a controlIer board acting as a bus master.
SBHE- C01 I/O This output signal (System Bus High Enable) indicates (when Iow) that the high haIf of the SD
data bus should transfer the data on boards which support the fuIl l6-bit data bus. It can be
driven by a controller board actinq as a bus master.
S0D A09 I/O
SD1 A08 I/O
SD2 A07 I/O
SD3 A06 I/O
SD4 A05 I/O
SD5 A04 I/O
SD6 A03 I/O
SD7 A02 I/O These bidirectional signals are the low 8 bits of the system data bus. They should be used
exclusively by all eight bit devices to transfer data. Sixteen-bit devices should use these lines
to transfer onIy the low half of a data word when the address line A0 is low. These can be
driven by a controIIer board acting as a bus master.
SD08 C11 I/O
SD09 C12 I/O
SD10 C13 I/O
SD11 C14 I/O
SD12 C15 I/O
SD13 C16 I/O
SD14 C17 l/O
SD15 C18 I/O These bidirectional signals are the high 8 bits of the system data bus. Sixteen bit devices
should use these lines to transfer the high half of a data word when the line SBHE- is low.
These can be driven by a controller board acting as a bus master.
SMRDC- B12 O This output line (Standard Memory Read) is active (low) only when an address from 000000h
to 0FFFFFh is decoded. This Iine is derived from MRDC-.
SMWTC- B11 O This output line (Standard Memory Write) is active (low) only when an address from 0000000h
to 0FFFFFh is decoded. This line is derived from MWTC-.
T/C B27 O This output signal (when high) indicates that the Terminal Count of a DMA operation has been
reached. It should be decoded with the appropriate DAKx line for proper operation.
+5 Vdc B03
B29
D16
-5 Vdc B05 -- This line is connected to the system power supply for minus 5 volts. This supply is intended
for low-current usage only (500 mA) .
-I2 Vdc B07 -- This line is connected to the system power supply for minus 12 volts. This supply is intended
for low-current usage only (1.0 A).
+12 Vdc B09 -- This line is connected to the system power supply for I2 voIts. In addition to the maximum
current available from the suppIv, the maximum current aIlowed on this contact is 1.5 A.